using System.Text.RegularExpressions;

namespace CSharpPro._1016;

public class Six2
{
    //作业6
    //打印菱形，根据输入的行数，显示菱形形状
    public void TestPrint1()
    {
        Console.WriteLine("打印菱形，根据输入的行数，显示菱形形状");
        Console.WriteLine("请输入一个奇数数字");
        //总行数
        int num=Convert.ToInt32(Console.ReadLine());
        //空格数
        int space = (num - 1) / 2;
        //字符数
        int s = 1;
        for (int i = 0; i < num; i++)
        {
            for (int j = 0; j < space + s; j++)
            {
                if (j < space)
                {
                    Console.Write(" ");
                }
                else
                {
                    Console.Write("*");
                }
            }
            Console.Write("\n");
            if ((i + 1) >= (num + 1) / 2)
            {
                space++;
                s -= 2;
            }
            else
            {
                space--;
                s += 2;
            }
        }
        
    }
    /*用户登陆与注册*/
    private static Dictionary<string,string>  user=new Dictionary<string, string>();
    static bool IsValidUsername(string userName)
    {
        // 正则表达式：3-15个字符，只能包含字母、数字、下划线
        return Regex.IsMatch(userName, @"^[a-zA-Z0-9_]{3,15}$");
    }

    static bool IsValidPassword(string password)
    {
        // 验证长度
        if (password.Length < 6 || password.Length > 20)
            return false;

        // 验证是否包含至少1个大写字母、1个小写字母和1个数字
        bool hasUpper = Regex.IsMatch(password, @"[A-Z]");
        bool hasLower = Regex.IsMatch(password, @"[a-z]");
        bool hasNumber = Regex.IsMatch(password, @"[0-9]");

        return hasUpper && hasLower && hasNumber;
    }
    //用户注册
    public void TestPrint2()
    {
        Console.WriteLine("用户注册");
        String userName;
        String password;
        do
        {
            Console.Write("请输入用户名：");
            userName = Console.ReadLine();
            if (!IsValidUsername(userName))
            {
                Console.WriteLine("用户名不符合格式。");
            }
            else
            {
                break;
            }
        } while (true);
        
        do
        {
            Console.Write("请输入密码：");
            password = Console.ReadLine();
            if (!IsValidPassword(password))
            {
                Console.WriteLine("密码不符合输入格式。");
            }
            else
            {
                break;
            }
        }while(true);
        
        Console.Write("请确认密码：");
        String password2 = Console.ReadLine();
        if (password.Equals(password2)==false)
        {
            Console.WriteLine("密码错误！");
        }
        else
        {
            user.Add(userName, password);
        }
        TestPrint4();
    }
    //用户登录
    public void TestPrint3()
    {
        Console.WriteLine("用户登录：");
        String userName;
        do
        {
            Console.Write("请输入用户名；");
            userName = Console.ReadLine();
            if (!user.ContainsKey(userName))
            {
                Console.WriteLine("用户名不存在。");
            }
            else
            {
                break;
            }
        }while (true);
        String password;
        Console.Write("请输入密码；");
        password = Console.ReadLine();
        if (user[userName] != password)
        {
            Console.WriteLine("密码错误，登录失败。");
        }
        else
        {
            Console.WriteLine("登录成功。");
        }

        TestPrint4();
    }
    //主菜单交互
    public void TestPrint4()
    {
        Console.WriteLine("主菜单交互:");
        Console.WriteLine("有一下选项可供选择：\n1,登录。\n2,注册。\n3,退出。");
        Console.Write("请输入你的选项：");
        int num=Convert.ToInt32(Console.ReadLine());
        switch (num)
        {
            case 1:
                //登录
                TestPrint3();
                break;
            case 2:
                //注册
                TestPrint2();
                break;
            case 3:
                return;
            default:
                Console.WriteLine("没有此选项，请重新选择。");
                TestPrint4();
                break;
        }
    }
}